Go のランタイムはなぜ完全なデッドロック検出を提供していないか
from
Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス
Resource Allocation Graph
の循環を調べてデッドロックを検出する機構は、
パフォーマンス
の観点から見ると高価な処理
根拠
ランタイム
は
RAG
を維持する必要があり、リソースの要求または解放が行われるごとに、循環していないか調べる必要がある
そのため、多数の
ゴルーチン
がリソースの要求と解放を行う場合、都度検出アルゴリズムを行う必要があり、処理が遅くなる
また、ゴルーチンが同時に複数の排他的リソースを使う
ユースケース
が少ない
じゃあなぜ
RDBMS
では検出しているのか?
∵ 検出アルゴリズムがデータベース操作に比べて高速なので、パフォーマンスに影響を及ぼさないため
#GO